package Negocios;

import Gestores.DtoObjects.CursoDTO;
import Gestores.Entidades.EntidadCurso;
import Gestores.Factory.FactoryClass;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class CursoNegocio {

    private CursoDTO gestorCurso;

    public CursoNegocio() {
        gestorCurso = FactoryClass.getCursoInstance();
    }

    public ArrayList<Object> buscarPorId(int id) throws Exception {
        if (id < 0) {
            throw new Exception("Id especificado inválido.");
        } else {
            return gestorCurso.buscarPorId(id);
        }
    }

    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        if (idAfiliado == null) {
            throw new Exception("IdAfiliado es nulo o inválido.");
        } else {
            return gestorCurso.buscarPorIdAfiliado(idAfiliado);
        }
    }

    public void insertar(EntidadCurso ec) throws Exception {
        if (validarEntidad(ec)) {
            gestorCurso.insertar(ec);
        } else {
            throw new Exception("Entidad con ausencia de datos.");
        }
    }

    public void actualizar(int id, EntidadCurso ec) throws Exception {
        if (validarActualizar(ec) && (id > 0)) {
            gestorCurso.actualizar(id, ec);
        } else {
            throw new Exception("Entidad con ausencia de datos para actualizar.");
        }
    }

    public void eliminar(EntidadCurso ec) throws Exception {
        if (validarEliminacion(ec)) {
            throw new Exception("Entidad con ausencia de datos para la eliminacion.");
        } else {
            gestorCurso.eliminacionFisica(ec);
        }
    }

    public boolean existe(int id) throws Exception {
        if (id <= 0) {
            throw new Exception("El ID no es valido para validar la existencia.");
        } else {
            return gestorCurso.existe(id);
        }
    }

    private boolean validarEntidad(EntidadCurso ec) {
        if (ec.getId() < 0) {
            return false;
        }
        if (ec.getIdAfiliado() == null) {
            return false;
        }
        if (ec.getDescripcion() == null) {
            return false;
        }
        if (ec.getFecha() == null) {
            return false;
        }
        return true;
    }

    private boolean validarActualizar(EntidadCurso ec) {
        if (ec.getId() <= 0) {
            return false;
        }
        if (ec.getIdAfiliado() == null) {
            return false;
        }
        return true;
    }

    private boolean validarEliminacion(EntidadCurso ec) {
        if (ec.getId() <= 0) {
            return false;
        }
        if (ec.getIdAfiliado() == null) {
            return false;
        }
        return true;
    }

    public DefaultTableModel tabularDatos(ArrayList<Object> lista) {
        DefaultTableModel modelo = new DefaultTableModel();
        modelo.addColumn("Id");
        modelo.addColumn("Id Afiliado");
        modelo.addColumn("Descripción");
        modelo.addColumn("Fecha");
        for (int i = 0; i < lista.size(); i++) {
            EntidadCurso ec = (EntidadCurso) lista.get(i);
            Object[] fila = new Object[]{ec.getId(), ec.getIdAfiliado(), ec.getDescripcion(), ec.getFecha()};
            modelo.addRow(fila);
        }
        return modelo;
    }
}
